package cn.skyquant.quant4j.sdk.util.digest;

import org.apache.commons.codec.binary.Hex;

import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;

/*
 * 简单加密
 */
public class AES {
    /**
     * 自定义 KEY
     */
    private static byte[] keybytes = {0x31, 0x32, 0x33, 0x34, 0x35, 0x50,0x37, 0x38, 0x39, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46};

    /**
     * @param @param  value
     * @param @return 设定文件
     * @return String    返回类型
     * @throws
     * @Title: encrypt
     * @author yunlin.liu
     * @Description: 加密
     */
    public static String encrypt(String value) throws Exception {
        String s = null;
        int mode = Cipher.ENCRYPT_MODE;
        Cipher cipher = initCipher(mode);
        byte[] outBytes = cipher.doFinal(value.getBytes());
        s = String.valueOf(Hex.encodeHex(outBytes));
        return s;
    }

    public static String decrypt(String value) throws Exception {
        String s = null;
        int mode = Cipher.DECRYPT_MODE;
        Cipher cipher = initCipher(mode);
        byte[] outBytes = cipher.doFinal(Hex.decodeHex(value.toCharArray()));
        s = new String(outBytes);
        return s;
    }

    private static Cipher initCipher(int mode) throws NoSuchAlgorithmException,
            NoSuchPaddingException, InvalidKeyException {
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        Key key = new SecretKeySpec(keybytes, "AES");
        cipher.init(mode, key);
        return cipher;
    }
}
